<!-- 
    姓名：吴俊锋
    学号：20230371174
    班级：计科专升本5班
    日期：2024年5月18日 11:54
    描述：杨辉三角形
    -->
<!DOCTYPE html>
<html>
<head>
    <title>杨辉三角形</title>
</head>
<body>
    杨辉三角形:<br/>
     <!-- 输出结果 -->
    <pre id="output"></pre>
   
  
    <script>    

        function generatePascalTriangle(numRows) {// 生成杨辉三角形
            // 初始化一个空数组来存储杨辉三角形
            let triangle = [];
            // 检查输入是否合法
            if (numRows === 0) return triangle;
            // 添加第一行
            triangle.push([1]);
            // 添加第二行及其后续行
            for (let rowIndex = 1; rowIndex < numRows; rowIndex++) {
                // 初始化当前行的数组
                let row = [1];
                // 添加当前行的前一个行的元素之和到当前行
                for (let j = 1; j < rowIndex; j++) {
                    // 计算当前行的元素之和
                    row.push(triangle[rowIndex - 1][j - 1] + triangle[rowIndex - 1][j]);
                }
                // 添加1到当前行
                row.push(1);
                // 将当前行添加到杨辉三角形数组中
                triangle.push(row);
            }
            // 返回杨辉三角形数组
            return triangle;
        }

        function displayPascalTriangle(numRows) {// 显示杨辉三角形
            const triangle = generatePascalTriangle(numRows);// 生成杨辉三角形
            let displayString = '';// 用于显示的文本字符串

            triangle.forEach((row, index) => {// 遍历每一行
                let rowString = '';// 用于显示当前行的文本字符串
                for (let i = 0; i < row.length; i++) {// 遍历当前行的每个元素
                    rowString += row[i] + ' ';// 添加元素和空格到当前行的文本字符串
                }
                displayString += rowString.trim() + '\n';// 添加当前行的文本字符串到总的文本字符串，并添加换行符
            });
            document.getElementById('output').textContent = displayString;// 将总的文本字符串显示在页面上
        }
        function getPascalNumber(rowIndex, colIndex) {// 获取指定位置的数字
            rowIndex--;// 将行索引减1，以适应数组的索引
            colIndex--;     // 将列索引减1，以适应数组的索引
            const triangle = generatePascalTriangle(rowIndex + 1);// 生成杨辉三角形
            const number = triangle[rowIndex][colIndex];// 获取指定位置的数字
            console.log(`第${rowIndex + 1}行, 第${colIndex + 1}列的数字为: ${number}`);// 在控制台输出指定位置的数字
            return number// 返回指定位置的数字
        }

        // 显示杨辉三角形的前五行  
        displayPascalTriangle(5);

        // 获取并输出指定位置的数字，例如第4行第2列     
        getPascalNumber(5, 3);// 输出10
        getPascalNumber(4, 2);// 输出4
    </script>
</body>
</html>